package second.thread;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @Author: heweiwei
 * @Date: 2/8/25 PM2:48
 * @Description:
 */
public class MultiThreadWithReturnValue {

    public static void main(String[] args) {
        // 创建一个固定大小的线程池，包含 3 个线程
        ExecutorService executor = Executors.newFixedThreadPool(3);
        // 用于存储 Future 对象，每个 Future 对应一个任务的结果
        List<Future<Integer>> futures = new ArrayList<>();

        // 提交 5 个任务到线程池
        for (int i = 0; i < 3; i++) {
            Task task = new Task(i);
            // 提交任务并获取 Future 对象
            Future<Integer> future = executor.submit(task);
            futures.add(future);
        }

        // 遍历 Future 列表，获取每个任务的返回值
        for (Future<Integer> future : futures) {
            try {
                // 调用 get() 方法获取任务的返回值，此方法会阻塞直到任务完成
                Integer result = future.get();
                System.out.println("Task result: " + result);
            } catch (InterruptedException | ExecutionException e) {
                // 处理异常
                e.printStackTrace();
            }
        }

        System.out.println("all Thread completed");

        // 关闭线程池
        executor.shutdown();

    }
}
